/**
 * 
 */
package sistema.seguimiento.items.servicio.dao;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import sistema.seguimiento.items.domain.ObjectId;


/**
 * 
 * @author Mauri
 *
 */
public class Dao extends HibernateDaoSupport {

	/**
	 * Ejecuta una query en HQL
	 * @param hqlQuery
	 * @return
	 */
	public List<ObjectId> find(String hqlQuery) {
		return this.getHibernateTemplate().find(hqlQuery);
	}
	
	/**
	 * Realiza el flush en la base
	 */	
	public void flush() {
		this.getHibernateTemplate().flush();
	}

	/**
	 * Recupera la instancia de la clase con el id indicado
	 * 
	 * @param className
	 * @param id
	 * @return
	 */
	public ObjectId retrieve(Class<? extends ObjectId> aClass, Integer id) {

		ObjectId retrieved = (ObjectId) getHibernateTemplate().get(aClass.getCanonicalName(),
				id);
		return retrieved;
	}

	/**
	 * Persiste
	 * 
	 * @param objectId
	 */
	public void save(ObjectId objectId) {
		this.getHibernateTemplate().save(objectId);
	}

	/**
	 * Persiste y realiza el flush
	 * 
	 * @param objectId
	 */
	public void saveAndPost(ObjectId objectId) {
		this.save(objectId);
		this.getHibernateTemplate().flush();
	}

	/**
	 * Si el objeto a guardar no existe, lo crea, sino lo actualiza
	 * 
	 * @param objectId
	 */
	public void saveOrUpdate(ObjectId objectId) {
		this.getHibernateTemplate().saveOrUpdate(objectId);
	}

	/**
	 * Actualiza un objeto que ya existe
	 * 
	 * @param objectId
	 */
	public void update(ObjectId objectId) {
		this.getHibernateTemplate().update(objectId);
	}

}
